Ext.ns("liang");


liang.DynamicPanel = function(config) {  
    //模块类的名字  
    var moduleId = config.moduleId;  
    //主Tab名字  
    var tabPanel = config.tabPanel;  
    //加载模块类的地址  
    var moduleURL = config.moduleURL;
    //加载模块后的Action
    var action = config.action;
    //模块实例tab的id  
    var realId = config.realId || moduleId;  
    //缓存模块  
    tabPanel.modules = tabPanel.modules || {};  
    //模块实例的配置参数  
    var moduleParams = config.moduleParams || {};  
  	if(console)console.debug(config);
    if (tabPanel.findById(realId)) {  
        tabPanel.findById(realId).show();  
        //如果已经载入该Tab ,则调用调整函数  
        tabPanel.doLayout();  
        tabPanel.setActiveTab(tabPanel.findById(realId));  
        if (config.existCallBack)  
        config.existCallBack(tabPanel.findById(realId));  
        return;  
    }  
    /**/
    if(console)console.info(tabPanel.modules);
    if (tabPanel.modules[moduleId]) {  
        var module = tabPanel.modules[moduleId];  
        var moduleInstance = new module(moduleParams);  
        var newCmp = tabPanel.add(moduleInstance);  
        tabPanel.doLayout();  
        tabPanel.setActiveTab(newCmp);  
        return;  
    }  
    
    if(console)console.info('加载新模块');
    tabPanel.getEl().mask("加载数据中...");
    Ext.Ajax.request(  
    {  
        method: 'GET',  
        disableCaching: false,  
        //utf-8 编码  
        url: moduleURL,  
        success: function(response) {  
            var module = eval(response.responseText);  
            tabPanel.modules[moduleId] = module;//[moduleId] = module;  
            var moduleInstance = new module(moduleParams);  
            if(console)console.debug(moduleInstance);
            var newCmp = tabPanel.add(moduleInstance);  
            tabPanel.doLayout();  
            tabPanel.setActiveTab(newCmp);  
            tabPanel.getEl().unmask();
        }  
    }  
    );  
}  
liang.TopPanel = Ext.extend(Ext.Panel, {
			initComponent : function() {
				liang.TopPanel.superclass.initComponent.call(this);
			},
			constructor : function(cfg) {
				cfg = cfg || {};
				Ext.apply(this, cfg);
				liang.TopPanel.superclass.constructor.call(this, {
							title : "导航栏",
							region : "north",
							height : 71
						});
			}

		})

/**
 * <b>作用：</b> 最左边的菜单栏
 * 
 * @class liang.LeftPanel
 * @extends Ext.Panel
 */
liang.LeftPanel = Ext.extend(Ext.Panel, {
			showPanel : null,
			/**
			 * <font color = 'red'><b>作用：</b></font> 设置显示区域
			 * 
			 * @param {}
			 *            tabPanel
			 */
			setShowArea : function(_tabPanel) {
				// if(console)console.dir(tabPanel);
				this.showPanel = _tabPanel;
			},
			initComponent : function() {
				var _treeLoader = new Ext.tree.TreeLoader({
							url : "../mgr/moduleAction!loadByPid.action"
						});
				_treeLoader.on("beforeload", function(treeLoader, node) {
							if (!node.isRoot) {
								treeLoader.baseParams.pid = node.id;
							}
						}, this);
				// 使用异步树加载
				var _ancyTreeNode = new Ext.tree.AsyncTreeNode({
							text : "主体功能",
							loader : _treeLoader
						});
				var _treePanel = {
					xtype : "treepanel",
					id : "xx",
					border : false,
					root : _ancyTreeNode,
					listeners : {
						scope : this,
						click : function(node, evt) {
							// if(console)console.log(node.attributes);
							if (node.leaf) {
								// 打开页面放在BodyPanel中
								var _tabTitle = node.text;
								var _url = '../'+node.attributes.jsurl;// "mgr/user/user.js";//
								var _action = '../'+node.attributes.action;
								var _tabItem = null;
								if ((_tabItem = this.showPanel
										.findById(_tabTitle)) == undefined) {
									var _config = {
										realId : _tabTitle,
										moduleId : _tabTitle,
										moduleURL:_url,
										tabPanel:this.showPanel,
										moduleParams:{id : _tabTitle,title : _tabTitle,url:_action}
									};
									liang.DynamicPanel(_config);
								}
								else {
									this.showPanel.doLayout();
									this.showPanel.setActiveTab(_tabItem.id);
								}
							}
						}
					}
				};
				this.items = [_treePanel];
				liang.LeftPanel.superclass.initComponent.call(this);
			},
			constructor : function(cfg) {
				cfg = cfg || {};
				Ext.apply(this, cfg);

				liang.LeftPanel.superclass.constructor.call(this, {
							title : "菜单栏",
							region : "west",
							width : 127,
							layout : "fit",
							collapsible : true
						});
			}
		})

liang.BodyPanel = Ext.extend(Ext.TabPanel, {
			constructor : function(cfg) {
				cfg = cfg || {};
				Ext.apply(this, cfg);
				liang.BodyPanel.superclass.constructor.call(this, {
							title : "动态显示区域",
							region : "center",
							autoScroll : true,
							enableTabScroll : true,
							tabMargin : 100,
							autoDestroy : false,
							activeTab : 0,
							items : [{
										title : '主页',
										autoScroll : true,
										// autoLoad:{url:'index.jsp',scripts:false}
										html : "主页预留区"
									}]
						});
			},
			initComponent : function() {
				liang.BodyPanel.superclass.initComponent.call(this);
			},
			listeners : {
				beforeremove : function(tabp, tab) {
					tab.hide();
					// if(console)console.dir(tabp);
				}
			},
			loadMask : {
				msg : '数据加载中...'
			}
		})

liang.MainPanel = Ext.extend(Ext.Viewport, {
			topPanel : null,
			leftPanel : null,
			bodyPanel : null,

			initComponent : function() {
				liang.MainPanel.superclass.initComponent.call(this);
			},
			constructor : function(cfg) {
				cfg = cfg || {};
				Ext.apply(this, cfg);

				topPanel = new liang.TopPanel();

				leftPanel = new liang.LeftPanel();

				bodyPanel = new liang.BodyPanel();

				leftPanel.setShowArea(bodyPanel);

				liang.MainPanel.superclass.constructor.call(this, {
							layout : "border",
							boder : true,
							split : true,
							collapsible : true,
							items : [topPanel, leftPanel, bodyPanel],
							listeners : {}
						});
			}

		})

Ext.onReady(function() {
			Ext.QuickTips.init();
			new liang.MainPanel();
		});